/**
 * 战斗模块
 */
let isUtilsLoaded = false
var utils = { autoJSUtil: null, gestureUtil: null, imageUtil: null }

function main() {
    console.warn('战斗模块执行...')
    if (!isUtilsLoaded) {
        loadUtils()
        isUtilsLoaded = true
    }
    // 判断当前是否在战斗中
    if (!isFighting()) {
        console.warn('当前不在战斗中...')
        return
    }
    battleBusiness()
}

/**
 * 战斗中的逻辑
 */
function battleBusiness() {
    findCommonClick()
    if(!toBattle()) {
        // 没有可以攻击的对象 待机
        awiatTime()
    }
}

function findCommonClick() {
    utils.imageUtil.findImageClick('battle/aniOpen.png', 1)
    utils.imageUtil.findImageClick('battle/we.png', 1)
    utils.imageUtil.findImageClick('battle/x1.png', 1)
    utils.imageUtil.findImageClick('battle/x2.png', 1)
    sleep(500)
}

/**
 * 自动战斗逻辑
 */
function autoBattle() {
    utils.imageUtil.findImageClick('battle/autoBattle.png', 0.8)
    sleep(500)
    const p = utils.imageUtil.findImageInCapture('battle/stopAutoBattle.png', 0.8)
    if (p) {
        return true
    }
    return false
}

/**
 * 待机或者结束回合
 */
function awiatTime() {
    // moveUserUp()
    const isClick1 = utils.imageUtil.findImageClick('battle/wait.png')
    if(!isClick1) {
        sleep(1500)
        const isClick2 = utils.imageUtil.findImageClick('battle/wait.png')
        if(!isClick2) {
            sleep(500)
            utils.imageUtil.findImageClick('battle/timeout.png')
            sleep(500)
            utils.imageUtil.findImageClick('battle/accept.png')
        }
    }
}

/**
 * 找架打
 */
function toBattle() {
    if(!autoBattle() && !fixBattle()) {
        return commonBattle()
    }
    return false
}


/**
 * 固定战斗逻辑
 */
function fixBattle() {
    const pos = utils.imageUtil.findImageInCapture('battle/fix1.png', 0.7)
    if (pos) {
        exeFix1()
        return true
    }
    return false
}

/**
 * 乱动
 */
function moveUserUp() {
    const pos = utils.imageUtil.findImageInCapture('battle/corsur.png', 0.7)
    if (pos) {
        findColorInUp(pos)
    }
    sleep(250)
}

function findColorInUp(pos) {
    var point = findColor(captureScreen(), '#9891BA', {
        region: [pos.x, 0, 200, pos.y],
        threshold: 10
    })
    if (point) {
        click(point.x, point.y)
        sleep(1000)
        const isClick1 = utils.imageUtil.findImageClick('battle/wait.png')
        if(!isClick1) {
            click(40, 500)
        }
    }
}


/**
 * 特殊图第二章逻辑
 */
function exeFix1() {
    click(1185, 465)
    clickTimeout()
}

function clickWait() {
    click(1512, 807)
}

function clickTimeout() {
    click(75, 856)
}

/**
 * 找人打
 * @returns 是否打人
 */
function commonBattle() {
    // 找到治疗技 对自己使用治疗技能
    // const isHeadled = utils.imageUtil.findImageClick('battle/healing.png', 0.8)
    // if(isHeadled) {
    //     sleep(1000)
    //     utils.imageUtil.findImageClickWait('battle/amd.png', 0.8, 500, 6, 10, -10)
    //     sleep(500)
    //     utils.imageUtil.findImageClickWait('battle/accept-red.png', 0.8, 500, 6)
    //     return true
    // }
    // 一些固定的点, 没找到打的人, 走到这些点待机 
    touchPoint(['battle/point1.png',
        'battle/point3.png',
        'battle/point4.png',
        'battle/point6.png'])
    // 塔塔开
    const isClick1 = utils.imageUtil.findImageClick('battle/atk.png')
    if (isClick1) {
        sleep(1500)
        utils.imageUtil.findImageClick('battle/battle.png')
        return true
    }
    const isClick2 = utils.imageUtil.findImageClick('battle/atk2.png')
    if (isClick2) {
        sleep(1500)
        utils.imageUtil.findImageClick('battle/battle.png')
        return true
    }
    const isClick3 = utils.imageUtil.findImageClick('battle/atk3.png')
    if (isClick3) {
        sleep(1500)
        utils.imageUtil.findImageClick('battle/battle.png')
        return true
    }
    return false
}

function touchItem(path, th) {
    const battleModuleStorage = storages.create('battleModule')
    if (utils.imageUtil.findImageClick(path, th || 0.9) && !battleModuleStorage.get(path)) {
        sleep(1500)
        utils.imageUtil.findImageClick('battle/wait.png')
        battleModuleStorage.put(path, true)
        return true
    }
}

/**
 * 通过一些特殊的走位, 来特殊处理一些关卡
 */
function touchPoint(pointArray) {
    for(let point of pointArray) {
        console.log('特殊点---', point)
        touchItem(point)
    }
}

/**
 * 判断是否在战斗中
 */
function isFighting() {
    // 优先判断是否是战斗刚结束
    isBattleOver()
    const p = utils.imageUtil.findImageInCapture('battle/battleStart.png')
    if (p) {
        click(p.x, p.y)
        sleep(1000)
        return true
    }
    const p1 = utils.imageUtil.findImageInCapture('battle/danger1.png')
    if (p1) {
        return true
    }
    const p2 = utils.imageUtil.findImageInCapture('battle/danger2.png')
    if (p2) {
        return true
    }
    return false
}

function isBattleOver() {
    const p = utils.imageUtil.findImageInCapture('battle/battleOverTips.png', 0.9)
    if (p) {
        const battleModuleStorage = storages.create('battleModule')
        battleModuleStorage.clear()
        const p2 = utils.imageUtil.findImageInCapture('battle/cancel.png')
        sleep(1500)
        click(p2.x, p2.y)
        sleep(1500)
        click(p2.x, p2.y)
        sleep(1500)
        click(p2.x, p2.y)
        sleep(1500)
        click(p2.x, p2.y)
        sleep(1500)
        click(p2.x, p2.y)
        sleep(1500)
        click(p2.x, p2.y)
        sleep(1500)
        click(p2.x, p2.y)
        sleep(1500)
        click(p2.x, p2.y)
        sleep(1500)
        click(p2.x, p2.y)
        sleep(1500)
        click(p2.x, p2.y)
        sleep(1500)
        return true
    }
    return false
}

function loadUtils() {
    const configStorage = storages.create('config')
    utils.autoJSUtil = eval(configStorage.get('autoJSUtil'))
    utils.gestureUtil = eval(configStorage.get('gestureUtil'))
    utils.imageUtil = eval(configStorage.get('imageUtil'))
}

try {
    main()
} catch (error) {
    console.error(error)
}
